/*
    测试各种hash方法
*/
#include<stdio.h>
const int test_num_size=12;
int test_num[]={19,14,23,1,68,20,84,27,55,11,10,79};

int hashTable[1000];
//直接定址法
#define H_DIRECT 0
int direct(int key){
    int a=10;
    int b=5;
    return  a*key+b;
}
//除留余数法
#define H_DIVID 1
int divid(int key){
    int p=13;//映射到13以内的值
    return  key%13;
}
//数字分析法，根据最后一位映射
#define H_ANALYZE 2
int analyze(int key){
    int last_num=key%10;
    return last_num;
}
//平方取中法
#define H_SQUARE 3
int square(int key){
    int temp=key*key;

}
//使用拉链法作为冲突解决方法,虽然这种方法很直观
//但是实际实现起来比较麻烦
typedef struct __NODE__{
    int val;
    struct __NODE__ *next;//下一个的指针
}ChainNode;

void initTable_chaning(int f){

}

//初始化哈希表，可以指定散列函数和冲突解决方式
//只适用于顺序存储
void initTable(int f,int conflict_solver){
    if(conflict_solver==H_DIRECT){
        for(int i=0;i<test_num_size;i++){
            int index=direct(test_num[i]);
            hashTable[index]=test_num[i];
        }
    }else{

    }
    return;
}
void showTable(){
    for(int i=0;i<test_num_size;++i){
        printf("%d ",hashTable[i]);
    }
    printf("\n");
    return;
}

int main(int argc,char* argv[]){
    initTable(H_DIRECT,H_DIRECT);
    showTable();
    return 0;
}
